import router from './router'
import store from './store'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'

const whiteList = ['/login', '/404'] // 白名单,这两个不需要登入
router.beforeEach(async (to, from, next) => {
  // 在跳转前开启进度条
  nprogress.start()
  // 判断用户有没有登入
  if (store.getters.token) {
    // 如有有登入,判断是不是去登入页
    if (to.path === '/login') {
      next('/')
    } else {

       if(!store.getters.userId){
       const {roles} = await store.dispatch('user/getUserInfo')
       console.log(roles);
       const routes = await store.dispatch('permission/filterRoutes',roles.menus)
      //  console.log(routes);
      // 动态理由添加到路由表中, 默认只有静态路由
      router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])

      // 添加完成动态路由之后,必须多做一次跳转
      //当我们判断用户是否已经添加路由的前后，不能都是用next()，
      // 在添加路由之后应该使用 next(to.path)， 否则会使刷新页面之后 权限消失，这属于一个vue-router的已知缺陷

      next(to.path)

       } else {
        next()
       }
    }
  } else {
    // 没有登入是不是在白名单内
    if (whiteList.includes(to.path)) {
      next()
    } else {
      // 这里表示没有登入,又不在白名单
      next('/login')
    }
  }
})

router.afterEach((to, from) => {
  // 关闭进度条
  nprogress.done()
});
